// =====================================================================================
// 
//       Filename:  auto_ptr.cpp
// 
//    Description:  
// 
//        Version:  1.0
//        Created:  25.11.2011 14:39:22
//       Revision:  none
//       Compiler:  g++
// 
//         Author:  Dmitriy Serdyuk (), serdyuk.dmitriy@gmail.com
//        Company:  
// 
// =====================================================================================
#include "auto_ptr.h"

#include <iostream>

Object::Object() {
    std::cout << "constructor\n";
}

Object::~Object() {
    std::cout << "destructor\n";
}

void Object::foo() {
    std::cout << "foo\n";
    int i = 0;
    i += 1;
}

auto_ptr::auto_ptr(Object *p) {
    myPointer = p;
}

auto_ptr::~auto_ptr() {
    if (myPointer) {
        delete myPointer;
    }
}

bool auto_ptr::is_null() {
    return myPointer == 0;
}

auto_ptr::auto_ptr(auto_ptr &a) {
    myPointer = a.myPointer;
    a.myPointer = 0;
}

auto_ptr & auto_ptr::operator = (auto_ptr & a) {
    if (&a == this) {
        return (*this);
    }
    myPointer = a.myPointer;
    a.myPointer = 0;
    return (*this);
}

Object * auto_ptr::operator -> () const {
    return myPointer;
}

Object & auto_ptr::operator * () const {
    return (*myPointer);
}

